package com.cskaoyan.javase.network._1udp._v1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 发送端
 * @since 10:48
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Sender {
    public static void main(String[] args) throws IOException {
        // 发送端的思路是什么?
        // 1.创建发送端套接字对象,DatagramSocket对象
        // 发送端套接字的端口号只是用于唯一确定发送端进程,具体数据传输端口号还需要依赖于数据报包中填写的端口
        // ip:本机IP 端口：随机分配一个可用端口
        // DatagramSocket()
        // ip:主机IP 端口：参数指定
        // DatagramSocket(int port)
        // 指定IP和端口
        // DatagramSocket(int port,InetAddress laddr)
        DatagramSocket senderSocket = new DatagramSocket();
        // 2.封装数据报包,创建DatagramPacket对象,包含ip地址和端口号,这里的IP地址和端口号必须和接收端的"码头"套接字IP地址,端口号一样
        // 构造数据报包，用来将长度为length偏移量为offset的包发送到指定主机上的指定端口号。
        // DatagramPacket(byte[] buf,  int offset, int length, InetAddress address, int port)
        // 构造数据报包，用来将长度为length的包发送到指定主机上的指定端口号。
        // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        String msg = "在吗?我很想你!";
        byte[] buf = msg.getBytes();
        // 获取一个表示本地主机的InetAddress对象
        // InetAddress address = InetAddress.getLocalHost();
        // 获取一个指定ip地址的InetAddress对象
        // InetAddress address2 = InetAddress.getByName("ip地址");
        // InetAddress targetIP = InetAddress.getLocalHost();
        // 127.0.0.1就表示localhost 表示本地本机IP
        InetAddress targetIP = InetAddress.getByName("127.0.0.1");
        /*
            端口号是一个[0,65535]内的整数,可以随便填
            但是尽量不要用[0,1023] 这些端口号是系统使用或保留的端口号
         */
        DatagramPacket senderPacket = new DatagramPacket(buf, buf.length, targetIP, 8888);
        // 3.用DatagramSocket对象的成员方法-send方法,发送数据报包
        senderSocket.send(senderPacket);

        // 4.close关闭资源
        senderSocket.close();
    }
}
